package com.usermanage.controller;

import com.usermanage.SecurityConfig.SpringSecurityUtils;
import com.usermanage.SecurityConfig.UserDetail;
import com.usermanage.Service.GroupMemberService;
import com.usermanage.Service.GroupService;
import com.usermanage.beanParam.GroupBean;
import com.usermanage.beanParam.GroupMemberBean;
import com.usermanage.util.JsonData;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.*;

/**
 * 组织管理成员，管理基本权限，管理组织列表
 */
@Api(description = "组织接口")
@Controller
@RequestMapping("/group")
public class GroupController {

    @Resource
    private GroupService groupService;

    @Resource
    private GroupMemberService groupMemberService;


    @RequestMapping(value="/adminSearchGroup.page",method= RequestMethod.GET)
    public ModelAndView adminSearchGroup()throws Exception{
        ModelAndView mv = new ModelAndView();
        List<GroupBean> list = groupService.getAllByCompanyId(null,null,null);
        mv.addObject("result",list);
        mv.setViewName("/freemarker/group/index");
        return mv;
    }




//
//    /**
//     * 根据用户id得到用户所在当前组
//     * @return
//     * @throws Exception
//     */
//    @ApiOperation(value = "根据用户id查询用户组，返回数据为用户当前所在组及权限列表" ,  notes="根据用户id查询用户组，返回数据为用户当前所在组及权限列表")
//    @ApiImplicitParams({
//            @ApiImplicitParam(name = "userId", value = "用户标识(若传空查当前登陆用户信息，若传入用户id查传入用户的信息。)", paramType = "query", dataType = "String")
//    })
//    @RequestMapping(value="/queryUserGroup",method= RequestMethod.GET)
//    public JsonData queryUserGroupByUserId(@RequestParam("userId")String userId)throws Exception{
//        //1、判断是获取登陆用户信息，还是其他用户信息
//        //1、根据用户id得到用户详情
//        Optional<UserBean> optional = userMapping.findById(1);
//        //查询登陆用户当前组信息
////        GroupParam groupParam = groupService.queryUserGroupByUserId();
//        return JsonData.success();
//    }


//    /**
//     * 根据用户信息得到用户组列表。
//     * @return
//     * @throws Exception
//     */
//    @ApiOperation(value = "根据用户信息查询用户组列表,如:品宅公司及其下所有部门" ,  notes="根据用户信息查询用户组列表,如:品宅公司及其下所有部门")
//    @RequestMapping(value="/queryUserGroupList",method= RequestMethod.GET)
//    public JsonData queryUserGroupListByUserId()throws Exception{
//        //查询登陆用户下的组织列表
//        List list = groupService.queryUserGroupListByUserId();
//        return JsonData.success(list);
//    }

    /**
     * 添加组织信息
     * @param group
     * @param bindingResult
     * @return
     * @throws Exception
     */
    @RequestMapping(value="/creatGroup",method= RequestMethod.POST)
    public JsonData creatGroup(@Valid @RequestBody GroupBean group, BindingResult bindingResult)throws Exception{
        try {
            //验证提交参数
            if(bindingResult.hasErrors()){
                return JsonData.fail(bindingResult.getFieldError().getDefaultMessage());
            }
            //验证部门是否存在
//            Boolean bool =groupService.isExist(group.getGroup_uuid(),group.getGroup_name(),group.getParent_id());
//            if(bool) {
//                return JsonData.fail("同一层级下存在相同名称的部门");
//            }
            //添加组信息
//            int parentId = Integer.valueOf(group.getParent_id());
//            Optional<GroupBean> optional = groupService.findById(parentId);
//            if (optional.isPresent()){//父级查询成功
//                if (optional.get().getGroup_type().equals("11")){
//                    return JsonData.fail("权限组下不能再添加权限组。");
//                }
//                group.setLevel(StringUtil.calculateLevel(optional.get().getLevel(), parentId));
//            }else{
//                group.setLevel(StringUtil.calculateLevel(null, parentId));
//            }
//            group.setCreat_time(new Date());
//            group.setCompany_id(SpringSecurityUtils.getCurrentUser().getCompany_id());
//            groupService.save(group);
            return JsonData.success();
        }catch (Exception e){
            //打印日志
            return JsonData.fail("创建组织错误，系统异常！");
        }
    }



    @RequestMapping(value="/addGroup",method= RequestMethod.POST)
    public JsonData addGroup(@RequestParam("userId")String userId,@RequestParam("groupId")String groupId)throws Exception{
        try {
            UserDetail userDetail = SpringSecurityUtils.getCurrentUser();
            GroupMemberBean checkBean = new GroupMemberBean();
            checkBean.setGroup_id(groupId);
            checkBean.setUser_id(userId);
            checkBean.setCompany_id(userDetail.getCompany_id());
            boolean bool = groupMemberService.isExist(checkBean);
            if (bool){
                return JsonData.fail("该用户已经存在该组织中，无需再次添加。");
            }
            GroupMemberBean bean = new GroupMemberBean();
            bean.setGroup_id(groupId);
            bean.setUser_id(userId);
            groupMemberService.save(bean);
            return JsonData.success();
        }catch (Exception e){
            //打印日志
            return JsonData.fail("创建组织错误，系统异常！");
        }
    }






}
